import axios from 'axios'
// 导入vuex
import store from '@/store'
// 导入路由实例
import router from '@/router/index.js'

const service = axios.create({
  // process.env.NODE_ENV === 'development' 来判断是否开发环境
  // easy-mock服务挂了，暂时不使用了
  // baseURL: 'https://www.easy-mock.com/mock/592501a391470c0ac1fab128',
  timeout: 20000 // request timeout
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    // 设置基础的URL
    // config.baseURL = process.env.VUE_APP_BASE_URL
    config.baseURL = window.webConfig.webApiBaseUrl

    if (store.getters.token && store.getters.uid) {
      // 根据API文档 配置请求头字段
      config.headers.token = store.getters.token
      config.headers.uid = store.getters.uid
    }
    return config
  },
  error => {
    console.log(error)
    return Promise.reject()
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    if (response.status === 200) {
      return response.data
    } else {
      Promise.reject()
    }
  },
  error => {
    // console.log(error)
    /**
     * 处理token时效
     * 1. 根据http状态码401判断
     * 2. 如果是401就跳转回登录页
     */
    /* if (error.response && error.response.status === 401) {
      // 处理某些页面多个请求多次401重复跳转问题，造成重新登录后不能正确跳转到上次访问页面问题
      // 补充: 如果出现多次401报错，第一次处理401时会跳转回登录页，后续的401报错认为此时的path路径为/login，此时下面的判断满足，return，不继续跳转
      if (router.currentRoute.path === '/login') return

      // 跳转之前 调用vuex中的acions方法，清除本地登录数据
      store.dispatch('user/logoutAction')
      // 执行跳转逻辑，带上当前路径 => 重新登录后跳转到上次出现401的页面
      router.replace(`/login?redirect=${router.currentRoute.fullPath}`)
      return Promise.reject(error.response)
    } */
    return Promise.reject(error.message)
  }
)

export default service
